perm filename FILL.FAI[RST,LCS] blob sn#231774 filedate 1976-08-16 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE FILLER
C00007 ENDMK
CāŠ—;
	TITLE FILLER
	ENTRY FILLER
	EXTERNAL PLTR,ALF,LINES
FLM:	BLOCK =600
		;	SUBROUTINE FILLER(QQ,MD)
		;	COMMON  /ALF/NO,H(72) /PLTR/P,RHT,DIS
		;	DIMENSION Q(1)
		;  H(72) =NO MORE THAN 72 SEGS AT ANY SLICE POSITION!!!
FILLER:	0		;	EQUIVALENCE (Q,I),(KNT,I(3))
	MOVE FLM		;	RL=Q(1)
	MOVEM LEFT#		; FLOATING!
	MOVEM RIGHT#		;	RR=RL
	SETZ 2,			;	DO 1 K=1,KNT,3
FL1:	MOVE FLM+2(2)		;CC	Q(K)=IFIX(Q(K))
	CAIN 3			;CC	Q(K+1)=IFIX(Q(K+1))
	SETOM FLM+2(2)		;DO THIS ABOVE?	IF(I(K+2).EQ.3)I(K+2)=-1

	MOVE FLM(2)		;	A=Q(K)
	CAMN FLM+3(2)		;	IF(Q(K+3).EQ.A)I(K+5)=-1
	SETOM FLM+5(2)		;C VERTICAL LINES WILL BE IGNORED.
	CAMGE LEFT		;	IF(RL.GT.A)RL=A
	MOVEM LEFT
	CAMLE RIGHT		;1	IF(RR.LT.A)RR=A
	MOVEM RIGHT		;C GET LEFT AND RIGHT EXTREME LIMITS.
	ADDI 2,3		;K=K+3
	CAMGE 2,FLM+2		;I(3)
	JRST FL1
	
	MOVN [0.5]		;	RR=RR-.5
	FADRM RIGHT
	FADRM LEFT		;	RL=RL-.5
FL2:	MOVSI 201400		;2	RL=RL+1
	FADRB LEFT		;C SLICE COUNTER
	CAML RIGHT		;	IF(RL.GT.RR)RETURN
	JRA 16,2(16)
	SETZ 11, 		;	M=0
	MOVEI 2,3		;	DO 3 J=4,KNT,3
FL3:	SKIPGE FLM+2(2)		;	IF(I(J+2))GO TO 3
	JRST FLX3
	MOVE FLM(2)		;A	IF(IHORZ(I,J,RL))GO TO 3
	MOVE 1,FLM-3(2)	;B	C FINDS SEGS UNDER SLICE AND REJECTS VERTICALS.
	CAML 0,1		;	FUNCTION IHORZ(Q,J,RL)
	EXCH 0,1		;	DIMENSION Q(1)
	CAML 0,LEFT		;	IHORZ=-1
	JRST FLX3		;	A=Q(J)
	CAMG 1,LEFT 		;	B=Q(J-3)
	JRST FLX3		;PREVIOUS X COORD. IF(A.GT.B)CALL EXCH(A,B)
	AOJ 11,			;	IF(RL.LE.B.AND.RL.GE.A)IHORZ=0
	             		;	M=M+1
				;	H(M)=HGT(J,RL,I)
	MOVE 3,FLM+1(2)		;	FUNCTION HGT(J,RL,Q)
	FSBR 3,FLM-2(2)		;	DIMENSION Q(1)
	MOVE LEFT		;	HGT=Q(J-2)
	FSBR FLM-3(2)		;C  PREVIOUS Y COORD.
	FMPR 3,0		;	A=Q(J-3)
	MOVE FLM(2)		;C  PREVIOUS X COORD.
	FSBR FLM-3(2)		;	HGT=((Q(J+1)-HGT)*(RL-A))/(Q(J)-A)+HGT
	FDVR 3,0		;CAN HAVE A DIVIDE BY ZERO HERE!!
	FADR 3,FLM-2(2)		;3	CONTINUE
	MOVEM 3,ALF(11)		;H(M)
FLX3:	ADDI 2,3
	CAMGE 2,FLM+2
	JRST FL3
	JUMPE 11,FL2		;	IF(M.EQ.0)GO TO 2
	          		;C  M=0=SPACE BETWEEN OBJECTS -- NO FILLER
	MOVEI 2,1		;	J=1
FL5:	MOVE ALF(2)		;5	IF(H(J).GE.H(J+1))GO TO 4
	CAML ALF+1(2)		;C  SORTS HEIGHTS
	JRST FL4		;	CALL EXCH(H(J),H(J+1))
	EXCH 0,ALF+1(2)
	MOVEM ALF(2)
	CAIN 2,1		;	IF(J.EQ.1)GO TO 4
	JRST FL4
	SOJ 2,			;	J=J-1
	JRST FL5		;	GO TO 5
FL4:	AOJ 2,			;4	J=J+1
	CAMGE 2,11		;	IF(J.LT.M)GO TO 5
	JRST FL5		;C GO BACK IF MORE SORTING TO BE DONE
	MOVEI 14,1		;	NN=1
FL6:	MOVE 13,ALF(14)		;CCCCC6	IF(H(NN).EQ.H(NN+1))GO TO 7
	MOVE 12,ALF+1(14)	;	A=H(NN)
	MOVE 13          	;	B=H(NN+1)
	FSBR 12
	CAMG [2.0]		;   IF(A-B.GT.1)CALL LINX(RL,A-1.,RL,B+1.)
	JRST FL7
	FSBR 13,[1.0]
	FADR 12,[1.0]		;A IS 13,  B IS 12
	JSA 16,LINES
	JUMP LEFT
	JUMP 13
	JUMP [3]
	JSA 16,LINES
	JUMP LEFT
	JUMP 12
	JUMP [2]
FL7:	ADDI 14,2		;7	NN=NN+2
	CAMGE 14,11		;C SKIP BY 2'S
	JRST FL6		;	IF(NN.LT.M)GO TO 6
	JRST FL2		;	GO TO 2
	END